﻿// test_cout_cin.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <string>
using namespace std;

int main()
{
    {
        for (;;)
        {
            cout << "请输入数字: " << flush;
            string line;
            int x{ 0 };
            cin >> x;
            if (cin.fail())
            {
                cin.clear(); //恢复状态为正常
                getline(cin, line); //取出cin里错误的内容，防止重复打印
                cout << "cin fail" << line << endl;
                continue;
            }

            cout << "x=" << x << endl;
        }

        /*
        string cmd;
        for (;;)
        {
            char c = cin.get();
            if (c == '\n' || c==';')
            {
                //换行时打印
                cout << "cmd:" << cmd << endl;
                cmd = "";
                continue;
            }
            cmd += c;
        }
        */

        /*
        string line;
        getline(cin, line);
        cout << "line: " << line << endl;
        */

        /*
        for (;;)
        {
            //单行输入getline
            char buf[1024]{ 0 };
            cout << ">>";
            cin.getline(buf, sizeof(buf) - 1);
            cout << "receive: " << buf << endl;
            if (strstr(buf, "exit")) break; //strstr用于比较字符串
        }
        */
    }

    ////cout标准输出ostream
    //cout << "test cout" << endl;
    //cout << 100 << endl;
    //cout << oct << 100 << endl; //八进制
    //cout << 100 << endl;

    //cout << hex << 100 << endl; //十六进制
    //cout << dec << 100 << endl; //恢复成十进制

    //cout << boolalpha;
    //cout << true << ":" << false << endl;

    ////cout无格式输入
    ////cout.put('A').put('B');
    ////cout.put('C');
    ////cout.put(68);
    //cout.write("123", 3);
    //string str = "teststring";
    //cout.write(str.c_str(), str.size());
    //cout << flush; //刷新缓冲区
    //cout << endl;

    ////cerr标准错误输出 无缓冲 stderr2
    //cerr << "test cerr 001\n";
    //cerr << "TEST CERR 002\n";


}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件，或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来，若要再次打开此项目，请转到“文件”>“打开”>“项目”并选择 .sln 文件
